相信軟體開發工程師對於這詞應該不陌生,所以我就多做贅述了,我只提及其重要的四個觀念在Python如何實作:
本文章同步放置於此
繼承的語法相較之下比較簡單請各位讀者看以下例子:
class Animal:
name = ''
def __init__(self, name):
self.name = name
def walk(self):
print('walking')
def eat(self):
print('eating')
class Dog(Animal):
def __init__(self, name):
super().__init__(name)
def walk(self):
print('{0} using foot walk'.format(self.name))
def eat(self):
print('{0} eat bone'.format(self.name))
animal = Dog('A')
animal.eat()
animal.walk()
由上述程序說明了Python使用( )
表示所繼承的物件,當要使用時只要類別名稱()
即可產生一個型別為該類別名稱
的物件。
再進一步說明,這裏的self
指的是物件實體,當要使用物件的屬性時都要加上self.
前綴詞。再來__init__
是類別的建構子,當使用類別名稱()
會先呼叫建構子,並執行建構子的程序,在Dog的例子中會給予該物件一個名字,再來super
是呼叫父類別的語法,上述例子是建構子中呼叫父類別的建構子並將名稱賦予進去。
在上述繼承的例子中eat()
與walk()
就是封裝的表現,讓外部使用者直接使用而不需考慮內部實作,若是在開發中如果有私有變數不希望讓外部使用者,或者是被繼承的類別使用的可以使用__
前綴詞來命名變數名稱例如:
class Animal:
name = ''
__private = ''
def __init__(self, name):
self.name = name
def walk(self):
print('walking')
def eat(self):
print('eating')
接承上述例子,在多建立一個class繼承上述的Animal並實作eat()
跟walk()
之後當實體物件以Dog產生則其eat()
跟walk()
會依據Dog的實作來執行,若以新的class來產生實體則會依據新class的eat()
跟walk()
實作來執行,請見以下例子:
class Duck(Animal):
def __init__(self, name):
super().__init__(name)
def walk(self):
print('{0} using two foot walk'.format(self.name))
def eat(self):
print('{0} eat worm'.format(self.name))
animal = Dog('A')
animal = Duck('A')
animal.eat()
animal.walk()
結果會是顯示以下內容:
A using two foot walk
A eat worm
抽象的表現是為實作的class不能產生實體,而該class僅是定義一個模板告訴實作者要實作什麼內容,儘管Python根本上沒有修飾詞可以宣告抽像類別,但是仍可透過擴充函式庫來做到,待後續再補充相關資料。
透過本章的說明希望各位讀者們可以對Python的OOP有更進一步的了解。在說完OOP已經方法後下一章要介紹另一個可以把程序寫的更簡潔的裝飾器,在說明裝飾器後會再針對類別的進階內容再作補充,敬請期待。